﻿//using System.Text.RegularExpressions;
//using RuoVea.CodeGen.Server.Util;

//namespace RuoVea.CodeGen.Server.Dto;
///// <summary>
///// 代码生成详细配置参数
///// </summary>
//public class CodeGenConfig
//{
//    /// <summary>
//    /// 主键Id
//    /// </summary>
//    public long Id { get; set; }

//    /// <summary>
//    /// 代码生成主表ID
//    /// </summary>
//    public long CodeGenId { get; set; }

//    /// <summary>
//    /// 数据库字段名
//    /// </summary>
//    public string ColumnName { get; set; }

//    /// <summary>
//    /// 主外键
//    /// </summary>
//    public string ColumnKey { get; set; }

//    /// <summary>
//    /// 实体属性名
//    /// </summary>
//    public string PropertyName { get; set; }

//    /// <summary>
//    /// 字段数据长度
//    /// </summary>
//    public int ColumnLength { get; set; }

//    /// <summary>
//    /// 数据库字段名(首字母小写)
//    /// </summary>
//    public string LowerPropertyName => string.IsNullOrWhiteSpace(PropertyName) ? null : PropertyName[..1].ToLower() + PropertyName[1..];

//    /// <summary>
//    /// 字段描述
//    /// </summary>
//    public string ColumnComment { get; set; }

//    /// <summary>
//    /// .NET类型
//    /// </summary>
//    public string NetType { get; set; }

//    /// <summary>
//    /// 数据库中类型（物理类型）
//    /// </summary>
//    public string DataType { get; set; }

//    /// <summary>
//    /// 可空.NET类型
//    /// </summary>
//    public string NullableNetType => Regex.IsMatch(NetType ?? "", "(.*?Enum|bool|char|int|long|double|float|decimal)[?]?") ? NetType.TrimEnd('?') + "?" : NetType;

//    /// <summary>
//    /// 作用类型（字典）
//    /// </summary>
//    public string EffectType { get; set; }

//    /// <summary>
//    /// 外键库标识
//    /// </summary>
//    public string FkConfigId { get; set; }

//    /// <summary>
//    /// 外键实体名称
//    /// </summary>
//    public string FkEntityName { get; set; }

//    /// <summary>
//    /// 外键表名称
//    /// </summary>
//    public string FkTableName { get; set; }

//    /// <summary>
//    /// 外键实体名称(首字母小写)
//    /// </summary>
//    public string LowerFkEntityName => string.IsNullOrWhiteSpace(FkEntityName) ? null : FkEntityName[..1].ToLower() + FkEntityName[1..];

//    /// <summary>
//    /// 外键链接字段
//    /// </summary>
//    public string FkLinkColumnName { get; set; }

//    /// <summary>
//    /// 外键显示字段
//    /// </summary>
//    [JsonIgnore]
//    [System.Text.Json.Serialization.JsonIgnore]
//    public string FkDisplayColumns { get; set; }

//    /// <summary>
//    /// 外键显示字段
//    /// </summary>
//    public List<string> FkDisplayColumnList { get; set; }

//    /// <summary>
//    /// 外键显示字段(首字母小写)
//    /// </summary>
//    public List<string> LowerFkDisplayColumnsList => FkDisplayColumnList?.Select(name => name[..1].ToLower() + name[1..]).ToList();

//    /// <summary>
//    /// 外键显示字段.NET类型
//    /// </summary>
//    public string FkColumnNetType { get; set; }

//    /// <summary>
//    /// 父级字段
//    /// </summary>
//    public string PidColumn { get; set; }

//    /// <summary>
//    /// 字典code
//    /// </summary>
//    public string DictTypeCode { get; set; }

//    /// <summary>
//    /// 查询方式
//    /// </summary>
//    public string QueryType { get; set; }

//    /// <summary>
//    /// 是否是查询条件
//    /// </summary>
//    public string WhetherQuery { get; set; }

//    /// <summary>
//    /// 列表是否缩进（字典）
//    /// </summary>
//    public string WhetherRetract { get; set; }

//    /// <summary>
//    /// 是否必填（字典）
//    /// </summary>
//    public string WhetherRequired { get; set; }

//    /// <summary>
//    /// 是否可排序（字典）
//    /// </summary>
//    public string WhetherSortable { get; set; }

//    /// <summary>
//    /// 列表显示
//    /// </summary>
//    public string WhetherTable { get; set; }

//    /// <summary>
//    /// 增改
//    /// </summary>
//    public string WhetherAddUpdate { get; set; }

//    /// <summary>
//    /// 导入
//    /// </summary>
//    public string WhetherImport { get; set; }

//    /// <summary>
//    /// 是否是通用字段
//    /// </summary>
//    public string WhetherCommon { get; set; }

//    /// <summary>
//    /// 排序
//    /// </summary>
//    public int OrderNo { get; set; }

//    /// <summary>
//    /// 是否是选择器控件
//    /// </summary>
//    public bool IsSelectorEffectType => Regex.IsMatch(EffectType ?? "", "Selector$|ForeignKey", RegexOptions.IgnoreCase);

//    /// <summary>
//    /// 去掉尾部Id的属性名
//    /// </summary>
//    public string PropertyNameTrimEndId => PropertyName.TrimEnd("Id");

//    /// <summary>
//    /// 去掉尾部Id的属性名
//    /// </summary>
//    public string LowerPropertyNameTrimEndId => LowerPropertyName.TrimEnd("Id");

//    /// <summary>
//    /// 扩展属性名称
//    /// </summary>
//    public string ExtendedPropertyName => EffectType switch
//    {
//        "ForeignKey" => $"{PropertyName.TrimEnd("Id")}FkDisplayName",
//        "ApiTreeSelector" => $"{PropertyName.TrimEnd("Id")}DisplayName",
//        "DictSelector" => $"{PropertyName.TrimEnd("Id")}DictLabel",
//        "Upload" => $"{PropertyName.TrimEnd("Id")}Attachment",
//        _ => PropertyName
//    };

//    /// <summary>
//    /// 首字母小写的扩展属性名称
//    /// </summary>
//    public string LowerExtendedPropertyName
//    {
//        get
//        {
//            var displayPropertyName = ExtendedPropertyName;
//            if (string.IsNullOrWhiteSpace(displayPropertyName)) return null;
//            return displayPropertyName[..1].ToLower() + displayPropertyName[1..];
//        }
//    }

//    /// <summary>
//    /// 获取外键显示值语句
//    /// </summary>
//    /// <param name="tableAlias">表别名</param>
//    /// <param name="separator">多字段时的连接符</param>
//    /// <returns></returns>
//    public string GetDisplayColumn(string tableAlias, string separator = "-") => "$\"" + string.Join(separator, FkDisplayColumnList?.Select(name => $"{{{tableAlias}.{name}}}") ?? new List<string>()) + "\"";
//}